#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<sys/types.h>

int code=0;

int main()
{
  pid_t id=fork();
  if(id<0)
  {
      //申请子进程失败
      perror("fork");
      exit(1);
  }
  else if(id==0)
  {
      //子进程
      int count=5;
      while(count--)
      {
          printf("count:%d 我是子进程,pid:%d ppid:%d\n",count,getpid(),getppid());
          sleep(1);
      }
      code = 10;
      exit(10);
  }
  else
  {
   //我是父进程
      {
          printf("我是父进程,pid:%d ppid:%d\n",getpid(),getppid());
         // sleep(7);
         // wait(NULL); 
          int status =0;
          pid_t ret=0;
          ret=waitpid(id,&status,0);//阻塞式等待
         if(ret>0)
         {
          printf("等待子进程成功,ret:%d 子进程收到的信息编号:%d 子进程退出码:%d\n",ret,status&0x7F,(status>>8)&0xFF);
         printf("code:%d\n",code);
         }
         while(1)
         {
          printf("我是父进程,pid:%d ppid:%d\n",getpid(),getppid());
            sleep(1);
          }
          
      }
   
  }
  

}
